package conf

import (
	"fmt"
	"gopkg.in/ini.v1"
	"greatTool/models"
	"os"
	"path/filepath"
)

func GetTtlConf() (models.TtlIni, error) {
	defaultIni := "ttl.ini"

	homeDir, err := os.UserHomeDir()
	if err != nil {
		return models.TtlIni{}, fmt.Errorf("获取用户目录失败: %w", err)
	}

	// 创建配置目录
	configDir := filepath.Join(homeDir, ".ttl")
	if err := os.MkdirAll(configDir, 0755); err != nil {
		return models.TtlIni{}, fmt.Errorf("创建配置目录失败: %w", err)
	}

	confFilePath := filepath.Join(configDir, defaultIni)
	dbFilePath := filepath.Join(configDir, "data.db")

	// 检查配置文件是否存在
	if _, err := os.Stat(confFilePath); os.IsNotExist(err) {
		// 创建默认配置
		return createDefaultConfig(confFilePath, dbFilePath)
	}

	// 配置文件存在，加载它
	cfg, err := ini.Load(confFilePath)
	if err != nil {
		return models.TtlIni{}, fmt.Errorf("加载配置文件失败: %w", err)
	}

	var ttlIni models.TtlIni
	if err := cfg.MapTo(&ttlIni); err != nil {
		return models.TtlIni{}, fmt.Errorf("解析配置文件失败: %w", err)
	}

	return ttlIni, nil
}

func createDefaultConfig(configPath, dbPath string) (models.TtlIni, error) {
	cfg := ini.Empty()

	// 设置默认值
	cfg.Section("").Key("db_path").SetValue(dbPath)

	// 保存配置文件
	if err := cfg.SaveTo(configPath); err != nil {
		return models.TtlIni{}, fmt.Errorf("保存默认配置失败: %w", err)
	}

	// 返回默认配置对象
	return models.TtlIni{}, nil
}
